/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package camada.bancodedados.daoimplemente.produto;

import camada.apresentacao.dialog.produto.ProdutoDAO;
import camada.bancodedados.conexao.Conexao;
import eloma.classe.produto.Produto;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import org.jdesktop.swingx.error.ErrorInfo;
import utilitarios.erros.MessagemErro;

/**
 *
 * @author KLINGER
 */
public class ProdutoDAOImpl implements ProdutoDAO {

    //<editor-fold desc="Metodos Basicos">
    @Override
    //<editor-fold desc="Metodo de Inserção">
    public void inserirProduto(Produto pro) {
        PreparedStatement pstm = null;
        int idEmpresa = 0;
        try {
            final String SQL_INSERIR_EMPRESA
                    = "INSERT INTO PRODUTO(codigoBarras,descricao,desconto,comissao,precoVenda,precoCusto)values(?,?,?,?,?,?)";
            pstm = (PreparedStatement) Conexao.getCon().prepareStatement(SQL_INSERIR_EMPRESA);
            pstm.setString(1, pro.getCodigoBarras());
            pstm.setString(2, pro.getDescricao());
            pstm.setDouble(3, pro.getDesconto());
            pstm.setDouble(4, pro.getComissao());
            pstm.setDouble(5, pro.getPrecoVenda());
            pstm.setDouble(6, pro.getPrecoCusto());
            pstm.executeUpdate();
        } catch (SQLException e) {
            MessagemErro erro = new MessagemErro(new ErrorInfo("Erro no Sistema", "Não é Possível Continuar, Sistema Inativo", null, "Fatal", e, Level.WARNING, null), 1);
        }
    }
     //</editor-fold>

    @Override
    //<editor-fold desc="Metodo de Atualização Empresa">
    public void atualizarProduto(Produto pro) {
        com.mysql.jdbc.PreparedStatement pstm = null;
        try {
            final String SQL_UPDATE
                    = "UPDATE PRODUTO SET codigoBarras = ?, descricao = ?, desconto = ?, comissao = ?, precoVenda = ?, precoCusto = ? WHERE idProduto = ? ";
            pstm = (com.mysql.jdbc.PreparedStatement) Conexao.getCon().prepareStatement(SQL_UPDATE);
            pstm.setString(1, pro.getCodigoBarras());
            pstm.setString(2, pro.getDescricao());
            pstm.setDouble(3, pro.getDesconto());
            pstm.setDouble(4, pro.getComissao());
            pstm.setDouble(5, pro.getPrecoVenda());
            pstm.setDouble(6, pro.getPrecoCusto());
            pstm.setInt(7, pro.getIdProduto());
            pstm.executeUpdate();
        } catch (SQLException e) {
            MessagemErro erro = new MessagemErro(new ErrorInfo("Erro no Sistema", "Não é Possível Continuar, Sistema Inativo", null, "Fatal", e, Level.WARNING, null), 1);
        }
    }
    //</editor-fold>

    @Override
    //<editor-fold desc="Metodo Remoção Email">
    public void removerProduto(int idProduto) {
        com.mysql.jdbc.PreparedStatement pstm = null;
        try {
            final String SQL_DELETE = "delete from produto where idProduto = ?";
            pstm = (com.mysql.jdbc.PreparedStatement) Conexao.getCon().prepareStatement(SQL_DELETE);
            pstm.setInt(1, idProduto);
            pstm.executeUpdate();
        } catch (SQLException e) {
            MessagemErro erro = new MessagemErro(new ErrorInfo("Erro no Sistema", "Não é Possível Continuar, Sistema Inativo", null, "Fatal", e, Level.WARNING, null), 1);
        }
    }
    //</editor-fold>

    //</editor-fold>
    //<editor-fold desc="Metodos Pesquisa">
    @Override
    //<editor-fold desc="Metodo Pesquisa Todos Produtos">
    public List<Produto> selecionarTodasProdutos() throws Exception {
        com.mysql.jdbc.PreparedStatement stmt = null;
        ResultSet rs = null;
        String SELECT_EMPRESA_EMAIL = "SELECT * FROM PRODUTO";
        try {
            stmt = (com.mysql.jdbc.PreparedStatement) Conexao.getCon().prepareStatement(SELECT_EMPRESA_EMAIL);
            rs = stmt.executeQuery();
        } catch (SQLException sqle) {
            MessagemErro erro = new MessagemErro(new ErrorInfo("Erro no Sistema", "Não é Possível Continuar, Sistema Inativo", null, "Fatal", sqle, Level.WARNING, null), 1);
        } catch (Exception e) {
            MessagemErro erro = new MessagemErro(new ErrorInfo("Erro no Sistema", "Não é Possível Continuar, Sistema Inativo", null, "Fatal", e, Level.WARNING, null), 1);
        } finally {
            return carregarVariosResultados(rs);
        }
    }
    //</editor-fold>

    @Override
    //<editor-fold desc="Metodo Pesquisa Produtos">
    public Produto selecionarProduto(int idProduto) throws Exception {
        PreparedStatement stmt = null;
        ResultSet rs = null;
        try {
            final String SQL_PESQUISA_CLIENTE = "select * from produto where idProduto = ? ";
            stmt = Conexao.getCon().prepareStatement(SQL_PESQUISA_CLIENTE);
            stmt.setInt(1, idProduto);
            rs = stmt.executeQuery();
        } catch (SQLException sqle) {
            MessagemErro erro = new MessagemErro(new ErrorInfo("Erro no Sistema", "Não é Possível Continuar, Sistema Inativo", null, "Fatal", sqle, Level.WARNING, null), 1);
        } catch (Exception e) {
            MessagemErro erro = new MessagemErro(new ErrorInfo("Erro no Sistema", "Não é Possível Continuar, Sistema Inativo", null, "Fatal", e, Level.WARNING, null), 1);
        } finally {
            return carregarSimpleResultado(rs);
        }
    }
    //</editor-fold>

    //</editor-fold>
    //<editor-fold desc="Metodos de Construção">
    private Produto carregarSimpleResultado(ResultSet rs) throws SQLException {
        if (rs.next()) {
            Produto dto = new Produto();
            carregarVO(dto, rs);
            return dto;
        } else {
            return null;
        }
    }

    public List<Produto> carregarVariosResultados(ResultSet rs) throws SQLException {
        List<Produto> resultList = new ArrayList<Produto>();
        while (rs.next()) {
            Produto dto = new Produto();
            carregarVO(dto, rs);
            resultList.add(dto);
        }
        return resultList;
    }

    private void carregarVO(Produto dto, ResultSet rs) throws SQLException {
        dto.setIdProduto(rs.getInt("IdProduto"));
        dto.setCodigoBarras(rs.getString("codigobarras"));
        dto.setDescricao(rs.getString("descricao"));
        dto.setDesconto(rs.getDouble("desconto"));
        dto.setComissao(rs.getDouble("comissao"));
        dto.setPrecoVenda(rs.getDouble("precoVenda"));
        dto.setPrecoCusto(rs.getDouble("precoCusto"));
    }

     //</editor-fold>
}
